package cn.dj.pet.service.impl;

import cn.dj.pet.domain.PetType;
import cn.dj.pet.mapper.PetTypeMapper;
import cn.dj.pet.service.IPetTypeService;
import cn.dj.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 业务实现类：宠物类型
 */
@Service
public class PetTypeServiceImpl extends BaseServiceImpl<PetType> implements IPetTypeService {
    @Autowired//注入
    private PetTypeMapper petTypeMapper;
    
    @Override
    public List<PetType> petTypeTree() {
        List<PetType> petTypes = petTypeMapper.loadAll();
        //1.将所有PetType信息保存在Map中，方便根据id去获取当前PetType对象，就不用查数据库了-先查出来存在内存中了
        Map<Long, PetType> map = new HashMap<>();
        for (PetType petType : petTypes) {
            map.put(petType.getId(), petType);
        }

        //2.获取菜单树：遍历所有的菜单，没有父id就直接添加到菜单树，有父id，将自己装到父菜单的children中
        List<PetType> petTypeTree = new ArrayList<>();//菜单树
        for (PetType petType : petTypes) {
            if (petType.getParentId() == null) {//一级菜单
                petTypeTree.add(petType);
            } else {
                //3.如果不是顶级菜单【parent_id!=null]】，找到自己的父菜单，将自己加到父菜单的children集合
                //获取父部门的id - 是为了获取父部门对象 - 获取父部门的children集合
                Long parentId = petType.getParentId();
                //根据id获取父部门对象
                PetType parentPetType = map.get(parentId);
                //防止父部门数据的删除引起的空指针异常
                if (parentPetType != null) {//为null不能调用方法，会报错
                    parentPetType.getChildren().add(petType);
                }
            }

        }
        return petTypeTree;
    }
    }

